package com.ingenio.servlet;

import java.io.IOException;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ingenio.business.Almacen;
import com.ingenio.business.DetalleRecuento;
import com.ingenio.business.EstadoDetalleRecuento;
import com.ingenio.business.EstadoRecuento;
import com.ingenio.business.Producto;
import com.ingenio.business.Recuento;
import com.ingenio.business.Usuario;
import com.ingenio.dao.AlmacenAdapter;
import com.ingenio.dao.EstadoDetalleRecuentoAdapter;
import com.ingenio.dao.EstadoRecuentoAdapter;
import com.ingenio.dao.ProductoAdapter;
import com.ingenio.dao.RecuentoAdapter;
import com.ingenio.dao.UsuarioAdapter;

/**
 * Servlet implementation class GenerarPedido
 */
@WebServlet("/GenerarRecuento")
public class GenerarRecuento extends HttpServlet {
	private static final long serialVersionUID = 1L;
	   
    /**
     * @see HttpServlet#HttpServlet()
     */
    public GenerarRecuento() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.sendRedirect("index.jsp");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		try {
//			DateFormat df = new SimpleDateFormat("dd/mm/yyyy");
			DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
			String[] id_productos = request.getParameterValues("id_producto");
			Integer idEncargado = Integer.parseInt(request.getParameter("encargadoAlm"));
			Integer idAlmacen = Integer.parseInt(request.getParameter("almacen"));
			Date fechaRecuento = df.parse(request.getParameter("fechaRecuento"));
			boolean bloqueaStock = Boolean.parseBoolean(request.getParameter("chkBloqueaInv"));
			
			//Obtenemos el estado del Recuento
			EstadoRecuentoAdapter era = new EstadoRecuentoAdapter();
			EstadoRecuento er = era.devolverEstadoRecuento(2); //Estado 2: pendiente
			
			//Obtenemos el estado del Detalle Recuento
			EstadoDetalleRecuentoAdapter edra = new EstadoDetalleRecuentoAdapter();
			EstadoDetalleRecuento edr = edra.devolverEstadoDetalleRecuento(1); //Estado 1: Pendiente de recuento
			
			// Recuepero Almacen
			AlmacenAdapter aa = new AlmacenAdapter();
			Almacen a = aa.devolverAlmacen(idAlmacen);
			
			// obtengo Usuario Planificador y encargado de Recuento
			UsuarioAdapter ua = new UsuarioAdapter();
			Usuario usuarioPlan=null, usuarioRec=null;
			usuarioRec = ua.devolverUsuario(idEncargado);
			usuarioPlan = null; //ua.devolverUsuario(getSeesion) Obtener usuario planificador de sesion
			
			List<DetalleRecuento> detallesR = new ArrayList<DetalleRecuento>();
			DetalleRecuento dr = null;
			ProductoAdapter pa = new ProductoAdapter();
			Producto pr = null;
			RecuentoAdapter ra = new RecuentoAdapter();
			
			// creo Recuento
			Recuento r = new Recuento(null, fechaRecuento, bloqueaStock, usuarioPlan, usuarioRec, null, er);
			
			for(int i=0; i<id_productos.length; i++){
				pr = pa.devolverProducto(id_productos[i]);
				dr = new DetalleRecuento(pr, a, r, 0.0, fechaRecuento, edr);
				detallesR.add(dr);
			}
			// asigno detalles a Recuento
			r.setDetallesRecuento(detallesR);
			
			ra.agregarRecuento(r);
			response.sendRedirect("index");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
